6. Un Front Controller al rescate

La solución es utilizar un Front Controller: un único fichero PHP a través del cual TODAS las peticiones son procesadas. Con un Front Controller, las URIs para la aplicación ligeramente pero empiezan a ser más flexibles:



Hay que tener en cuenta que la parte de la URI "index.php" se puede eliminar mediante reglas de apache (a modificar en el .htaccess).

Al usar un Front Controller, en este caso index.php, todas las peticiones las gestionará dicho fichero PHP, por lo que por ejemplo una petición del estilo /index.php/show ejecutara realmente el fichero index.php, el cual se encargará de redirigir la petición internamente. Como se verá a continuación un Front Controller es una herramienta muy potente.

Creando el Front Controller

Con un único fichero gestionando todas las peticiones, se pueden centralizar cosas tan importantes como la seguridad, configuración y redirecciones.

Primero, debemos asegurar que todas las peticiones pasen por nuestro Front Controller, index.php. Para ello, añadimos un fichero ".htaccess" a la raiz de nuestro sitio web (abrir bloc de notas, guardar como, seleccionar opción "todos los archivos", .htaccess), con el siguiente contenido:



Modifiquemos ahora el index.php para "convertirlo" en un Front Controller:



Para mejorar la organización, los dos controladores (el antiguo index.php y show.php, que puede eliminarse) serán ahora funciones y se moverán a un fichero separado, controllers.php:



Como Front Controller, index.php ha tomado un nuevo rol, uno que incluye la carga de librerías y redirigir las peticiones internamente para llamar a uno de los 2 controladores (las funciones list_action() y show_action()). Este nuevo Front Controller empieza a parecerse cada vez más al sistema de gestión de peticiones de Symfony2.

Hasta el momento la aplicación ha evolucionado de un único fichero PHP a una estructura bien organizada que permite la reutilización de código. ¡Enhorabuena, acabas de crear tu propio framework!

Pero, no todo es perfecto. Existen varios problemas. Por ejemplo, el sistema de redirección tiene debilidades y no reconoce que la página de listado (/index.php) debería ser accesible a través de la raiz (/). Además, en lugar de dedicarnos a diseñar nuestro blog, hemos perdido mucho tiempo creando la estructura (e.g., redirección, llamada a controladores, plantillas, etc.). Se necesitaría dedicar más tiempo a gestionar el envío de formularios, validar el input del usuario, logueo y seguridad.

En vez de reinventar la rueda, aprovecharemos las tecnologías existentes que se nos ofrecen, "Añadiendo un toque de Symfony2".

<<5. Añadiendo una página para mostrar los posts|7. Añadiendo un toque de Symfony2>>


Manual elaborado por Carlos Laorden para la asignatura Ingeniería Web de la Universidad de Deusto. Referencias empleadas: The Book (Symfony) y Symblog